
public class SistemaTriangular {
    private double a[][];
    private double b[];

    public SistemaTriangular(double[][] a, double[] b) {
        this.a = a;
        this.b = b;
    }

    public double[] inferior() throws Exception {
        if (a.length != b.length) {
            throw new Exception("A quantidade de linhas da matriz 'A' não é a mesma da matriz 'B'");
        }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                if (j > i) {
                    if (a[i][j] != 0) {
                        throw new Exception("A matriz 'A' não é uma matriz triangular inferior");
                    }
                }
            }
        }
        double s[] = new double[b.length];
        double c = b[0] / a[0][0];
        s[0] = c;
        for (int i = 1; i < s.length; i++) {
            c = b[i];
            for (int j = 0; j < i; j++) {
                c -= a[i][j] * s[j];
            }
            s[i] = c / a[i][i];
        }
        return s;
    }

    public double[] superior() throws Exception {
        if (a.length != b.length) {
            throw new Exception("A quantidade de linhas da matriz 'C' não é a mesma da matriz 'D'");
        }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                if (j < i) {
                    if (a[i][j] != 0) {
                        throw new Exception("A matriz 'C' não é uma matriz triangular superior");
                    }
                }
            }
        }
        double s[] = new double[b.length];
        double c = b[b.length - 1] / a[b.length - 1][b.length - 1];
        s[b.length - 1] = c;
        for (int i = b.length - 2; i > -1; i--) {
            c = b[i];
            for (int j = b.length - 1; j > i; j--) {
                c -= a[i][j] * s[j];
            }
            s[i] = c / a[i][i];
        }
        return s;
    }
}
